/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.appspot.trafficando.domain;

import java.util.List;

/**
 *
 * @author Domenico Maria Giffone
 */
public interface EventCategory  {

    public String getScheme();

    /**
     * RFC4287: The "term" attribute is a string that identifies the
     * category to which the entry or feed belongs.  Category elements
     * MUST have a "term" attribute.
     * @return The string value of the term attribute
     */
    public String getTerm();

    /**
     * RFC4287: The "label" attribute provides a human-readable label
     * for display in end-user applications.  The content of the "label"
     * attribute is Language-Sensitive.  Entities such as "&amp;amp;" and
     * "&amp;lt;" represent their corresponding characters ("&amp;" and
     * "&lt;", respectively), not markup.  Category elements MAY have a
     * "label" attribute.
     * @return The value of the human-readable label
     */
    public String getLabel();

    public List<? extends EventCategory> within(String scheme);

    public <T extends EventCategory> T of(String term);

    public List<? extends EventCategory> registeredCategories();
}
